草庐IT

C++ unique_ptr 和映射

全部标签

c++ - 我的 API 函数应该采用 shared_ptr 还是 weak_ptr

我目前正在设计一个API,我不确定我的函数是否应该采用shared_ptr或weak_ptr.有包含查看器的小部件。观众有一个功能add_painter这给观众增加了一个画家。当查看器需要重新绘制时,它会使用其绘制器绘制到缓冲区中并显示结果。我得出的结论是观众应该使用weak_ptr捕获画家:一个画家可能被多个观众使用,所以观众不能拥有画家。删除画家应该将其从查看器中删除。这样,用户就不需要记住他们必须调用remove_painter。功能。可能有不同类型的查看器,因此它们隐藏在界面后面。什么签名最适合add_painter界面中的功能?我应该直接使用voidadd_painter(w

c++ - 将 std::exception_ptr 转换为 boost::exception_ptr

我想使用boost::promise::set_exception()需要一个boost::exception_ptr。问题是boost:exception_ptr似乎只有在我用enable_current_exception包裹所有我的抛出时才能正常工作,我想避免这种情况。(无论如何,我无法为第3方图书馆做到这一点。)我在整个代码中使用std::exception_ptr/std::current_exception,所以我正在寻找一种方法来传递std::exception_ptr,其中boost:exception_ptr是预期的。执行以下操作但编译的东西:boost::excep

不同局域网下使用Python自带HTTP服务进行文件共享「端口映射」

文章目录1.前言2.视频教程3.本地文件服务器搭建3.1python的安装和设置3.2cpolar的安装和注册4.本地文件服务器的发布4.1Cpolar云端设置4.2Cpolar本地设置5.公网访问测试6.结语转载自内网穿透工具的文章:Python一行代码实现文件共享【内网穿透公网访问】1.前言数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用,对于个人用户也有很强的实用意义。也正因如此,大量数据共享软件被开发出来,云存储的概念也被重复炒作。对于爱好折腾的笔者来说,用最简单的工具找寻私人共享和存储解决方案,也是件很有趣的事。今天,笔者就为大家介绍,如何使用python这样

c++ - 链接器映射文件有时有损坏的符号,但并非总是如此

作为构建过程的一部分,我们会在编译可执行文件时生成一个映射文件。例如:g++-Wl,-Map,/tmp/foo.map-ofoofoo.cpp为了尝试从GCC4.3/4.4迁移到GCC4.9,我们设置了一个新的构建服务器。4.9构建服务器生成的映射文件没有损坏的符号名称。4.3/4.4构建服务器生成的map文件可以。例如,用4.3运行上面的代码,我在map文件中截取了这个:.plt0x00000000004007000x90/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../lib64/crt1.o0x0000000000400710_ZN

c++ - unique_ptr 实现中可能存在的错误

这个问题在这里已经有了答案:Unique_ptrandforwarddeclaration(2个答案)关闭6年前。我试图将unique_ptr类成员与前向声明一起使用。正如许多消息来源所说,例如Forwarddeclarationwithunique_ptr?声明非内联析构函数应该就足够了,但在VS2013和GCC5.3.1中似乎并非如此。我没有测试其他编译器。例子:#includeclassB;classA{public://A();~A();private:std::unique_ptrb;};//classB{};intmain(){Aa;}我只能在取消注释ctor声明或类B声明

c++ - 在什么情况下 std::unique_ptr::operator[] 可能抛出?

我的类有一个operator[],它所做的就是在unique_ptr上调用std::unique_ptr::operator[]>成员(member)。相关部分就是这样:templatestructFoo{T&operator[](constsize_tpos)constnoexcept{returndata_[pos];}std::unique_ptrdata_;};我已将运算符标记为noexcept。但是,unique_ptr::operator[]不是noexcept。我无法找出原因,也不知道我是否可以假设它永远不会抛出。unique_ptr::operator[]本身没有在文档

c++ - 键值映射中的部分查找,其中键本身是键值映射

假设我们有一个数据结构,它是一个键值映射,其中键本身也是一个键值映射。例如:map>,string>现在,假设我们要查询此映射中与键的键值的某个子集匹配的所有顶级键/值。示例:map={{"k1":"v1","k2:"v2"}:"value1",{"k1":"v3","k2:"v4"}:"value2",{"k1":"v1","k2:"v5"}:"value3"}我们的查询是“给我所有键值,其中键包含{"k1":"v1"},它会返回第一个和第三个值。类似地,查询{"k1":"v3","k2":"v4"}将返回同时具有k1=v3和k2=v4的所有键值>,产生第二个值。显然我们可以在每个查

c# - 如何将带有 const char* 的 C union 映射到 C# 结构?

在本地库的回调函数中,我需要访问一个espeak_EVENT数组。问题出在原C代码中的UNION语句:typedefstruct{espeak_EVENT_TYPEtype;unsignedintunique_identifier;//messageidentifier(or0forkeyorcharacter)inttext_position;//thenumberofcharactersfromthestartofthetextintlength;//wordlength,incharacters(forespeakEVENT_WORD)intaudio_position;//th

c# - 为什么在从 C# 而不是从 C++ 访问内存映射文件时会出现拒绝访问异常

我有一个使用命名管道的WCF服务。显然不使用url作为名称。它从url生成一个GUID,然后将其存储在内存映射文件中。所以我写了一个C++应用程序,它从内存映射文件中获取管道的名称,而且效果很好。现在我正在尝试制作一个c#应用程序,它从内存映射文件中获取管道的名称。这是我正在使用的代码。privatestaticstringGetPipeName(stringmappedFileName){varmappedFile=MemoryMappedFile.OpenExisting(mappedFileName,MemoryMappedFileRights.Read);varbytes=ne

c++ - 为什么 weak_ptr 没有 atomic_{store,load}?

为什么C++标准包含atomic_store或atomic_load重载shared_ptr而不是weak_ptr?这只是一个疏忽,还是有没有为weak_ptr提供原子操作的实际原因? 最佳答案 这似乎是一个疏忽。HerbSutter为atomic_shared_ptr/atomic_unique_ptr/atomic_weak_ptr提出了一个C++(17?)标准设计提案,该文档还解释了现有方法的缺点,其中包含用于shared_ptr的免费函数atomic_load/atomic_store:http://www.open-std